package com.zhiche.lisa.bms.service.pay;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.zhiche.lisa.bms.dao.model.pay.PayApply;
import com.zhiche.lisa.bms.pojo.vo.activiti.HistoryTask;
import com.zhiche.lisa.bms.pojo.vo.common.CommonVO;
import com.zhiche.lisa.bms.pojo.vo.pay.PayApplyCapitalVO;
import com.zhiche.lisa.bms.pojo.vo.pay.PayApplyObjVO;
import com.zhiche.lisa.bms.pojo.vo.pay.PayApplyVO;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 支付申请单主表 服务类
 * </p>
 *
 * @author WangShuiJin
 * @since 2018-09-27
 */
public interface PayApplyService extends IService<PayApply> {
    /**
     * 查询支付申请列表
     *
     * @param page
     * @return
     */
    Page<PayApply> queryPayApplyPage(Page<PayApply> page);

    /**
     * 查询支付申请列表（不分页）
     *
     * @param condition
     * @return
     */
    List<PayApply> queryPayApplyList(Map<String, Object> condition);

    /**
     * 根据id集合查询支付申请列表
     *
     * @param ids
     * @return
     */
    List<PayApply> queryPayApplyByIds(List<Long> ids);

    /**
     * 创建支付申请列表
     *
     * @param payApplyVO
     * @return
     */
    PayApply insertPayApply(PayApplyVO payApplyVO);

    /**
     * 修改支付申请，对应的关系
     *
     * @param payApplyVO
     * @return
     */
    void updatePayApplyToDetailed(PayApplyVO payApplyVO);

    /**
     * 根据支付申请ID，获取支付申请下的所有明细
     *
     * @param payId
     * @return
     */
    PayApplyObjVO getPayApplyByPayIdList(long payId);

    /**
     * 支付申请审核
     *
     * @param payIds
     */
    void verifyPayApply(List<Long> payIds);

    /**
     * 支付申请提交审核
     *
     * @param payIds
     */
    void commitConfirmPayApply(List<Long> payIds);

    /**
     * 取消支付申请审核
     *
     * @param payIds
     */
    void cancelVerifyPayApply(List<Long> payIds);

    /**
     * @param condition
     * @return
     */
    CommonVO<PayApplyCapitalVO> selectPayApplyListByAllMoney(Map<String, Object> condition);

    /**
     * 根据id获取对应的账单明细
     *
     * @param id
     * @return
     */
    List<Long> getPayApplyBillDetailIdList(Long id);

    /**
     * 根据支付申请单id更新银行卡信息
     *
     * @param payIds
     * @return
     */
    List<PayApply> updateBankDataByPayIds(List<Long> payIds, String token);

    /**
     * 支付申请单审核通过
     *
     * @param payApplyId
     * @throws Exception
     */
    void computePayApplyTask(Long payApplyId) throws Exception;

    /**
     * 获取支付申请审批历史
     *
     * @param payApplyId
     * @return
     * @throws Exception
     */
    List<HistoryTask> queryPayApplyHistoryTaskList(Long payApplyId) throws Exception;

    /**
     * 查询支付申请列表
     *
     * @param page
     * @return
     */
    Page<PayApply> queryWaitConfirmPayApplyPage(Page<PayApply> page);

    /**
     * 更新万金油哦状态
     */
    void updateOidSyncStatus();

    /**
     * 判断当前账单下的明细在原有的支付申请是否创建过
     *
     * @param billId
     */
    void verifyBillAndPayApply(Long billId);

    /**
     * 支付申请推送bms自动出账
     *
     * @param payApply
     */
    void payApplyToBmsCreateBill(PayApply payApply);
}
